PyTorch 용어 사전
PyTorch & GPU 실습 용어 사전
1. 하드웨어 관련
GPU (Graphics Processing Unit)
그래픽 처리 장치로, 원래는 그래픽 렌더링을 위해 설계되었지만 병렬 처리에 특화되어 딥러닝 연산에 널리 사용됩니다.
특징
- 수천 개의 작은 코어로 구성되어 병렬 처리에 최적화
- CPU 대비 딥러닝 학습 속도 10-100배 향상 가능
- 행렬 연산, 텐서 연산에 특히 효율적
CPU vs GPU 비교
| 구분 | CPU | GPU |
|---|---|---|
| 코어 수 | 4-32개 | 수천 개 |
| 처리 방식 | 순차 처리 | 병렬 처리 |
| 메모리 | 큰 캐시 | 높은 대역폭 |
| 용도 | 범용 연산 | 특화 연산 |
CUDA (Compute Unified Device Architecture)
NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼으로, GPU를 범용 연산에 사용할 수 있게 해주는 기술입니다.
주요 구성요소
- CUDA 드라이버: GPU와 운영체제를 연결
- CUDA 런타임: 프로그램 실행 환경
- CUDA 라이브러리: cuDNN, cuBLAS 등 최적화된 수학 라이브러리
버전 호환성
- PyTorch는 특정 CUDA 버전과 연결되어 빌드됨
- 서버의 CUDA 드라이버 버전과 PyTorch CUDA 버전 호환성 중요
- 예: PyTorch CUDA 12.1은 CUDA 드라이버 12.1 이상에서 동작
nvidia-smi
NVIDIA System Management Interface의 줄임말로, NVIDIA GPU 상태를 모니터링하는 명령줄 도구입니다.
주요 정보
- GPU 사용률 (%)
- 메모리 사용량 (MB)
- GPU 온도 (°C)
- 실행 중인 프로세스 목록
- 드라이버 버전
사용 예시
nvidia-smi # 현재 상태 확인
watch -n 1 nvidia-smi # 1초마다 갱신
nvidia-smi -l 1 # 1초마다 연속 출력
2. 소프트웨어 환경
Ubuntu Server
Linux 배포판 중 하나로, 서버 환경에 최적화된 운영체제입니다.
특징
- 오픈소스 기반의 안정적인 운영체제
- 개발자 친화적인 패키지 관리 시스템 (apt)
- 클라우드 환경에서 널리 사용
- LTS (Long Term Support) 버전은 5년간 지원
주요 명령어
sudo apt update # 패키지 목록 업데이트
sudo apt install <package> # 패키지 설치
sudo apt upgrade # 패키지 업그레이드
SSH (Secure Shell)
네트워크 상의 다른 컴퓨터에 안전하게 접속하기 위한 프로토콜입니다.
보안 특징
- 모든 통신이 암호화됨
- 공개키/개인키 방식의 인증
- 포트 22번 기본 사용
접속 방법
ssh -i <key-file> <username>@<server-ip>
가상환경 (Virtual Environment)
프로젝트별로 독립된 Python 환경을 만들어 패키지 충돌을 방지하는 도구입니다.
필요성
- 프로젝트마다 다른 패키지 버전 요구사항
- 시스템 Python 환경 보호
- 패키지 의존성 격리
venv 사용법
python3 -m venv venv # 가상환경 생성
source venv/bin/activate # 활성화 (Linux/Mac)
deactivate # 비활성화
pip (Pip Installs Packages)
Python 패키지 관리자로, PyPI(Python Package Index)에서 패키지를 설치/관리합니다.
주요 명령어
pip install <package> # 패키지 설치
pip list # 설치된 패키지 목록
pip freeze # 의존성 목록 생성
pip install -r requirements.txt # 의존성 일괄 설치
3. PyTorch 라이브러리
PyTorch
Facebook(Meta)에서 개발한 오픈소스 딥러닝 프레임워크입니다.
주요 특징
- 동적 계산 그래프: 실행 중에 그래프 구조 변경 가능
- Python 친화적: 직관적이고 디버깅하기 쉬운 API
- GPU 가속: CUDA를 통한 GPU 연산 지원
- 자동 미분: autograd를 통한 자동 기울기 계산
핵심 구성요소
torch: 핵심 텐서 라이브러리torch.nn: 신경망 구성 요소torch.optim: 최적화 알고리즘torch.utils.data: 데이터 로딩 유틸리티
텐서 (Tensor)
다차원 배열을 표현하는 PyTorch의 기본 데이터 구조입니다.
차원별 명칭
- 0차원: 스칼라 (scalar)
- 1차원: 벡터 (vector)
- 2차원: 행렬 (matrix)
- 3차원 이상: 텐서 (tensor)
GPU 텐서
tensor_cpu = torch.tensor([1, 2, 3]) # CPU 텐서
tensor_gpu = tensor_cpu.to('cuda') # GPU로 이동
tensor_gpu = torch.tensor([1, 2, 3]).cuda() # 직접 GPU 생성
torch.nn.Module
PyTorch에서 모든 신경망의 기본 클래스입니다.
주요 메서드
__init__(): 레이어 정의forward(): 순전파 과정 정의parameters(): 학습 가능한 파라미터 반환to(device): 모델을 특정 장치로 이동
사용 예시
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.layer = nn.Linear(10, 1)
def forward(self, x):
return self.layer(x)
torchvision
컴퓨터 비전을 위한 PyTorch 확장 라이브러리입니다.
주요 구성요소
datasets: 유명한 데이터셋들 (MNIST, CIFAR-10, ImageNet 등)transforms: 이미지 전처리 도구models: 사전 훈련된 모델들 (ResNet, VGG 등)
torchaudio
오디오 처리를 위한 PyTorch 확장 라이브러리입니다.
주요 기능
- 오디오 파일 로딩/저장
- 오디오 변환 및 증강
- 스펙트로그램 생성
4. 딥러닝 개념
신경망 (Neural Network)
인간의 뇌 구조를 모방한 기계학습 모델입니다.
구성요소
- 뉴런 (노드): 입력을 받아 출력을 생성하는 기본 단위
- 가중치 (Weight): 연결의 강도를 나타내는 학습 가능한 파라미터
- 편향 (Bias): 뉴런의 활성화 임계값을 조절하는 파라미터
레이어 (Layer)
신경망을 구성하는 계층 구조입니다.
Linear (Fully Connected) Layer
모든 입력이 모든 출력과 연결된 레이어입니다.
nn.Linear(in_features, out_features)
# 입력 크기: (batch_size, in_features)
# 출력 크기: (batch_size, out_features)
활성화 함수 (Activation Function)
뉴런의 출력을 비선형으로 변환하는 함수입니다.
ReLU (Rectified Linear Unit)
torch.relu(x) # max(0, x)
- 음수는 0으로, 양수는 그대로
- 계산이 빠르고 기울기 소실 문제 완화
- 가장 널리 사용되는 활성화 함수
손실 함수 (Loss Function)
모델의 예측과 실제 정답 간의 차이를 측정하는 함수입니다.
CrossEntropyLoss
다중 클래스 분류 문제에 사용되는 손실 함수입니다.
loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(predictions, targets)
- 확률 분포 간의 거리를 측정
- 소프트맥스와 음의 로그 우도를 결합
- 분류 문제에서 표준적으로 사용
음의 로그 우도 (Negative Log-Likelihood) 설명
정확히는 "음의 로그 확률"이라고 하는 것이 더 맞습니다. 하지만 딥러닝에서는 관습적으로 "음의 로그 우도"라고 부릅니다.
예시로 설명하면:
- 모델이 숫자 "7"을 예측할 확률을 [0.1, 0.05, 0.05, 0.1, 0.05, 0.05, 0.05, 0.6, 0.025, 0.025]로 출력
- 실제 정답이 "7"(인덱스 7)일 때, 정답 확률 = 0.6
- 로그 확률 = log(0.6) = -0.51
- 음의 로그 확률 = -(-0.51) = 0.51 ← 이것이 손실값
용어 정리
- 확률 (Probability): P(정답|입력) = 0.6
- 우도 (Likelihood): 통계학에서는 P(데이터|모델 파라미터)를 의미
- 실제 사용: 딥러닝에서는 "음의 로그 우도"라고 부르지만 실제로는 "음의 로그 확률"
왜 음의 로그를 사용하나?
- 확률이 높을수록 손실이 작아짐: 정답 확률 0.9 → 손실 0.1, 정답 확률 0.1 → 손실 2.3
- 수학적 안정성: 0에 가까운 확률값도 안전하게 처리
- 기울기 계산 용이: 로그 함수의 미분이 최적화에 유리
최적화 (Optimization)
모델의 파라미터를 학습 데이터에 맞게 조정하는 과정입니다.
Adam Optimizer
적응적 모멘트 추정을 사용하는 최적화 알고리즘입니다.
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
- 각 파라미터마다 다른 학습률 적용
- 모멘텀과 RMSprop의 장점을 결합
- 대부분의 상황에서 좋은 성능
모멘텀(Momentum)과 RMSprop 상세 설명
1. 모멘텀 (Momentum)
# 의사 코드
velocity = 0.9 * velocity + gradient
parameter = parameter - learning_rate * velocity
장점:
- 관성 효과: 이전 방향을 기억해서 일관된 방향으로 빠르게 이동
- 진동 감소: 좁은 골짜기에서 좌우 진동을 줄임
- 지역 최솟값 탈출: 작은 언덕을 넘어갈 수 있는 추진력
단점:
- 학습률 고정: 모든 파라미터에 같은 학습률 적용
- 스케일 문제: 파라미터별 기울기 크기 차이를 고려하지 못함
2. RMSprop (Root Mean Square propagation)
# 의사 코드
squared_gradient = 0.9 * squared_gradient + 0.1 * gradient²
parameter = parameter - learning_rate * gradient / sqrt(squared_gradient + ε)
장점:
- 적응적 학습률: 각 파라미터마다 다른 학습률 자동 조정
- 기울기 스케일링: 큰 기울기는 작게, 작은 기울기는 크게 조정
- 안정적 수렴: 기울기가 큰 방향에서는 보수적으로, 작은 방향에서는 적극적으로 이동
단점:
- 방향성 부족: 이전 방향을 기억하지 못해 지그재그 이동 가능
- 초기값 민감: 처음 몇 스텝에서 불안정할 수 있음
3. Adam = 모멘텀 + RMSprop
# Adam의 핵심 아이디어
# 1. 모멘텀 (1차 모멘트)
m = β1 * m + (1-β1) * gradient
# 2. RMSprop (2차 모멘트)
v = β2 * v + (1-β2) * gradient²
# 3. 편향 보정
m_corrected = m / (1 - β1^t)
v_corrected = v / (1 - β2^t)
# 4. 파라미터 업데이트
parameter = parameter - learning_rate * m_corrected / (sqrt(v_corrected) + ε)
Adam의 장점 (모멘텀 + RMSprop)
- 모멘텀의 장점: 일관된 방향성, 빠른 수렴, 진동 감소
- RMSprop의 장점: 적응적 학습률, 파라미터별 개별 조정
- 편향 보정: 초기 스텝에서의 불안정성 해결
- 하이퍼파라미터 견고성: 기본값(β1=0.9, β2=0.999)으로도 잘 동작
실제 동작 비교 예시
상황: 손실 함수가 좁고 긴 골짜기 형태
SGD: 지그재그로 느리게 이동
Momentum: 빠르게 이동하지만 목표점을 지나칠 수 있음
RMSprop: 안정적이지만 방향성 부족으로 비효율적
Adam: 빠르면서도 안정적으로 최적점에 도달
순전파와 역전파
딥러닝 학습의 핵심 과정입니다.
순전파 (Forward Propagation)
- 입력 → 레이어들 → 출력
- 예측값 계산 과정
역전파 (Backpropagation)
- 손실 함수의 기울기를 역방향으로 계산
- 연쇄 법칙 (Chain Rule) 사용
- 각 파라미터의 기울기 계산
학습 과정
optimizer.zero_grad() # 기울기 초기화
loss = loss_fn(output, target) # 손실 계산
loss.backward() # 역전파
optimizer.step() # 파라미터 업데이트
5. 데이터셋 관련
MNIST
손글씨 숫자 인식을 위한 대표적인 딥러닝 데이터셋입니다.
구성
- 훈련 데이터: 60,000개 이미지
- 테스트 데이터: 10,000개 이미지
- 이미지 크기: 28×28 픽셀 (흑백)
- 클래스: 0~9 숫자 (10개 클래스)
특징
- 딥러닝 입문용으로 최적화된 간단한 데이터셋
- 전처리가 거의 필요 없음
- 빠른 실험과 프로토타이핑에 적합
DataLoader
데이터를 배치 단위로 모델에 공급하는 PyTorch 유틸리티입니다.
주요 파라미터
batch_size: 한 번에 처리할 데이터 개수shuffle: 데이터 순서 무작위화 여부num_workers: 병렬 데이터 로딩 프로세스 수
dataloader = DataLoader(dataset, batch_size=64, shuffle=True)
배치 (Batch)
한 번에 처리하는 데이터 묶음입니다.
배치 처리의 장점
- GPU 메모리 효율적 활용
- 안정적인 기울기 계산
- 병렬 처리를 통한 속도 향상
배치 크기 고려사항
- 너무 크면: GPU 메모리 부족
- 너무 작으면: 불안정한 학습, 속도 저하
- 일반적으로 32, 64, 128 등 2의 거듭제곱 사용
데이터 변환 (Transform)
원본 데이터를 모델 입력에 맞게 변환하는 과정입니다.
ToTensor()
PIL 이미지나 numpy 배열을 PyTorch 텐서로 변환합니다.
transform = transforms.ToTensor()
- 픽셀 값을 [0, 255] → [0.0, 1.0]으로 정규화
- (H, W, C) → (C, H, W) 형태로 차원 순서 변경
6. 웹 개발 관련
FastAPI
Python으로 REST API를 빠르게 구축할 수 있는 현대적인 웹 프레임워크입니다.
주요 특징
- 고성능: 비동기 처리로 높은 성능
- 타입 힌트: Python 타입 힌트 기반 자동 검증
- 자동 문서화: OpenAPI/Swagger 문서 자동 생성
- 직관적 API: 간단하고 읽기 쉬운 코드
REST API
Representational State Transfer의 줄임말로, 웹 서비스 아키텍처 스타일입니다.
HTTP 메서드
GET: 데이터 조회POST: 데이터 생성PUT: 데이터 전체 수정DELETE: 데이터 삭제
JSON (JavaScript Object Notation)
데이터 교환을 위한 텍스트 기반 형식입니다.
특징
- 사람이 읽기 쉬운 형태
- 대부분의 프로그래밍 언어에서 지원
- 웹 API의 표준 데이터 형식
uvicorn
Python ASGI 서버로, FastAPI 애플리케이션을 실행하는 데 사용됩니다.
ASGI (Asynchronous Server Gateway Interface)
- 비동기 Python 웹 서버와 애플리케이션 간의 표준 인터페이스
- WSGI의 후속 버전으로 비동기 처리 지원
실행 옵션
uvicorn app:app --host 0.0.0.0 --port 8000
app:app: 모듈명:객체명--host 0.0.0.0: 모든 IP에서 접근 허용--port 8000: 포트 번호 지정
용어 간 관계도
GPU 하드웨어
├── CUDA 플랫폼
│ └── PyTorch 프레임워크
│ ├── 텐서 (기본 데이터 구조)
│ ├── nn.Module (신경망 클래스)
│ └── 최적화 알고리즘
│
데이터셋 (MNIST)
├── DataLoader (배치 처리)
└── Transform (전처리)
└── 신경망 학습
├── 순전파
├── 손실 계산
├── 역전파
└── 파라미터 업데이트
└── 모델 저장/로드
└── FastAPI 서빙
추가 학습 자료
공식 문서
온라인 강의
- PyTorch 튜토리얼 시리즈
- 딥러닝 기초 이론 강의
- 클라우드 서버 관리 가이드
실습 프로젝트 아이디어
- 다른 데이터셋으로 분류 모델 만들기 (CIFAR-10, Fashion-MNIST)
- CNN (Convolutional Neural Network) 구현
- 전이 학습 (Transfer Learning) 실습
- 모델 최적화 및 배포